#include <stdio.h>
#include <complex.h>  // C标准库复数头文件（支持 float complex/double complex）

// 复数乘法函数（复刻Python的mul逻辑）
double complex mul(double complex x, double complex y) {
    // 提取复数的实部和虚部（creal获取实部，cimag获取虚部）
    double a = creal(x);
    double b = cimag(x);
    double c = creal(y);
    double d = cimag(y);

    // 按照Python代码的公式计算中间变量
    double m1 = (a + b) * (c - d);
    double m2 = b * c;
    double m3 = a * d;

    // 计算结果的实部和虚部，构造复数返回（C99标准：complex字面量用 I 表示虚数单位）
    double real_part = m1 - m2 + m3;
    double imag_part = m2 + m3;
    return real_part + imag_part * I;
}

int main() {
    // 定义测试用例：1+3j 和 2+5j（C中复数构造：实部 + 虚部*I）
    double complex x = 1.0 + 3.0 * I;
    double complex y = 2.0 + 5.0 * I;

    // 调用复数乘法函数
    double complex result = mul(x, y);

    // 输出结果（%.0f 用于整数显示，避免小数位）
    printf("复数乘法结果：%.0f + %.0fj\n", creal(result), cimag(result));

    // 验证：用C标准库的 * 运算符计算（确认结果正确）
    double complex verify = x * y;
    printf("标准库验证结果：%.0f + %.0fj\n", creal(verify), cimag(verify));

    return 0;
}